/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package control;

import DAO.AnalisisDAO;
import DAO.CustodiaDAO;
import DAO.MuestraDAO;
import Entidad.Analisis;
import Entidad.Custodia;
import Entidad.Muestra;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Juan
 */

public class ControlMuestra {
    
    private MuestraDAO muestraDAO = new MuestraDAO();
    private AnalisisDAO analisisDAO = new AnalisisDAO();
    private CustodiaDAO custodiaDAO = new CustodiaDAO();
    private Connection conexion;
    
    public boolean camposValidos(Muestra muestra) throws Exception{
        
        if(muestra.getIdentificacion() == null || muestra.getIdentificacion().length() == 0)
            throw new Exception("No se proporcionó una identificación.");
        
        if(muestra.getCantidad() <= 0)
            throw new Exception("La cantidad de muestra debe ser mayor que cero.");
        return true;
        
    }
    
    public void iniciarConexion(){
        ConexionDB conexionBaseDeDatos = new ConexionDB();
        conexion = conexionBaseDeDatos.establecerConexion();
    }
    
    public void registrarMuestra(Muestra muestra, Analisis analisis) throws SQLException {
        int IDMuestra = muestraDAO.create(muestra, conexion);
        analisis.setIdMuestra(IDMuestra);
        custodiaDAO.create(new Custodia(IDMuestra), conexion);
        analisisDAO.create(analisis, conexion);
    }
    
    public void cerrarConexion() throws SQLException{
        conexion.close();
        conexion = null;
    }
    
    public ArrayList<Muestra> cargarMuestrasCustodia(int tipoBusqueda) throws Exception{
        ConexionDB conexionBaseDeDatos = new ConexionDB();
        conexion = conexionBaseDeDatos.establecerConexion();
        ArrayList<Muestra> muestras = muestraDAO.muestrasCustodia(tipoBusqueda, conexion);
        conexion.close();
        return muestras;
    }
    
    public int siguienteIDMuestra() throws SQLException {
        ConexionDB conexionBaseDeDatos = new ConexionDB();
        conexion = conexionBaseDeDatos.establecerConexion();
        int siguienteIDMuestra = muestraDAO.siguienteIDMuestra(conexion);
        conexion.close();
        return siguienteIDMuestra;
    }
    
    public Muestra buscarMuestra(String codigoAlpha) throws Exception {
        if (codigoAlpha != null && codigoAlpha.length() < 8)
            throw new Exception("El código alpha proporcionado es inválido.");
        
        String abreviaturaCliente = codigoAlpha.substring(0, 3);
        int consecutivoAlpha = Integer.valueOf(codigoAlpha.substring(3));
        
        Muestra muestra = new Muestra();
        muestra.setAbreviaturaCliente(abreviaturaCliente);
        muestra.setCodigoAlpha(consecutivoAlpha);
        
        ConexionDB conexionBaseDeDatos = new ConexionDB();
        conexion = conexionBaseDeDatos.establecerConexion();
        muestra = muestraDAO.load(muestra, conexion);
        conexion.close();
        if (muestra != null)
            return muestra;
        else
            throw new Exception("No se encontró ninguna muestra.");
    }
    
    public Analisis cargarAnalisis(int IDMuestra) throws Exception {
        Analisis analisis = new Analisis();
        analisis.setIdMuestra(IDMuestra);
        ConexionDB conexionBaseDeDatos = new ConexionDB();
        conexion = conexionBaseDeDatos.establecerConexion();
        analisis = analisisDAO.load(analisis, conexion);
        conexion.close();
        if (analisis != null)
            return analisis;
        else
            throw new Exception("No se encontraron los análisis para esta muestra.");
    }
    
}
